/******************************************************************************
 * Copyright (c) 2013-2016, Texas Instruments Incorporated - http://www.ti.com/
 *   All rights reserved.
 *
 *   Redistribution and use in source and binary forms, with or without
 *   modification, are permitted provided that the following conditions are met:
 *       * Redistributions of source code must retain the above copyright
 *         notice, this list of conditions and the following disclaimer.
 *       * Redistributions in binary form must reproduce the above copyright
 *         notice, this list of conditions and the following disclaimer in the
 *         documentation and/or other materials provided with the distribution.
 *       * Neither the name of Texas Instruments Incorporated nor the
 *         names of its contributors may be used to endorse or promote products
 *         derived from this software without specific prior written permission.
 *
 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 *   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 *   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 *   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 *   THE POSSIBILITY OF SUCH DAMAGE.
 *****************************************************************************/
#include "SimplifyShuffleBIFCall.h"
#include <list>
#include <llvm/IR/IntrinsicInst.h>
#include <llvm/IR/InstIterator.h>
#include <llvm/Transforms/Utils/BasicBlockUtils.h>


using namespace llvm;

namespace tiocl {

char TIOpenCLSimplifyShuffleBIFCall::ID = 0;
TIOpenCLSimplifyShuffleBIFCall::TIOpenCLSimplifyShuffleBIFCall() :
    FunctionPass(ID)
{
}

/**********************************************************************
* SimplifyShuffleBIFCall - simplify shuffle/shuffle2 OpenCL built-in
*                          function call with constant mask into
*                          LLVM ShuffleVectorInst
* shuffle(vec1, mask)        => ShuffleVectorInst(vec1, Undef, converted mask)
* shuffle2(vec1, vec2, mask) => ShuffleVectorInst(vec1, vec2,  converted mask)
**********************************************************************/
bool TIOpenCLSimplifyShuffleBIFCall::runOnFunction(llvm::Function &F)
{
    bool changed = false;

    std::list<CallInst*> call_list;
    for (inst_iterator I = inst_begin(&F), E = inst_end(&F); I != E; ++I)
    {
        if (CallInst *ins = dyn_cast<CallInst>(&*I))
        {
            /*-----------------------------------------------------------------
            * skip any calls to intrinsics or debug info
            *----------------------------------------------------------------*/
            llvm::Function *called = ins->getCalledFunction();
            if (!called || called->isIntrinsic() ||
                llvm::isa<llvm::DbgInfoIntrinsic>(ins))  continue;
            call_list.push_back(ins);
        }
    }

    for (auto &ins : call_list)  changed |= simplify_shuffle_call(ins);

    return changed;
}

/**********************************************************************
* simplify_shuffle_call - simplify shuffle/shuffle2 OpenCL built-in
*                         function call with constant mask into
*                         LLVM ShuffleVectorInst
**********************************************************************/
bool TIOpenCLSimplifyShuffleBIFCall::simplify_shuffle_call(llvm::CallInst *ins)
{
    /*-----------------------------------------------------------------
    * Initialize shuffle/shuffle2 Built-in Function names and number
    * of arguments (1280 of them), if not already
    *----------------------------------------------------------------*/
    if (shuffleBifs.empty())  initialize_shuffle_bif_names();

    /*-----------------------------------------------------------------
    * Get Function Name, see if it matches
    *----------------------------------------------------------------*/
    if (ins->getCalledFunction() == NULL)
        return false;

    SHUFFLE_BIFS_MAP::iterator it = shuffleBifs.find(
                                          ins->getCalledFunction()->getName());
    if (it == shuffleBifs.end())  return false;
    if (ins->getNumArgOperands() != it->second)  return false;

    /*-----------------------------------------------------------------
    * Get mask operand, see if it is constant vector
    * convert to <n x i32> as demanded by ShuffleVectorInst
    *----------------------------------------------------------------*/
    llvm::Value *vec1       = ins->getOperand(0);
    assert (vec1 != NULL);

    llvm::Value *vec2       = (it->second == 3) ? ins->getOperand(1)
                                      : llvm::UndefValue::get(vec1->getType());
    assert (vec2 != NULL);

    llvm::Constant *oldmask = llvm::dyn_cast<llvm::Constant>(
                                       ins->getArgOperand(it->second - 1));
    if (oldmask == NULL)  return false;

    llvm::VectorType *v1Type = llvm::dyn_cast<llvm::VectorType>(
                                                          vec1->getType());
    llvm::VectorType *v2Type = llvm::dyn_cast<llvm::VectorType>(
                                                          vec2->getType());
    llvm::VectorType *vType  = llvm::dyn_cast<llvm::VectorType>(
                                                       oldmask->getType());
    if (v1Type == NULL || v2Type == NULL || vType == NULL)  return false;

    int vLen          = vType->getNumElements();
    int validBits     = (it->second == 3) ? (v1Type->getNumElements() * 2 - 1)
                                          : (v1Type->getNumElements() - 1);
    llvm::Type* Int32 = llvm::IntegerType::getInt32Ty(vType->getContext());
    llvm::SmallVector<llvm::Constant *, 16> mask_val;
    for (int i = 0; i < vLen; i++)
    {
        llvm::Constant *mval = oldmask->getAggregateElement(i);
        if (mval == NULL)  return false;
        if (llvm::isa<UndefValue>(mval))
            mask_val.push_back(llvm::UndefValue::get(Int32));
        else if (llvm::ConstantInt *CI = llvm::dyn_cast<llvm::ConstantInt>(
                                                                     mval))
            mask_val.push_back(llvm::ConstantInt::get(Int32,
                                          CI->getZExtValue() & validBits));
        else
            return false;
    }
    llvm::Constant *mask = llvm::ConstantVector::get(mask_val);
    if (!llvm::ShuffleVectorInst::isValidOperands(vec1, vec2, mask))
        return false;

    /*-----------------------------------------------------------------
    * Create ShuffleVectorInst, use it to replace shuffle/shuffle2 BIF call
    *----------------------------------------------------------------*/
    llvm::Instruction *shuf = new llvm::ShuffleVectorInst(vec1, vec2, mask);
    llvm::ReplaceInstWithInst(ins, shuf);
    return true;
}

/**********************************************************************
* initialize_shuffle_bif_names - put names/#_args in the list
**********************************************************************/
void TIOpenCLSimplifyShuffleBIFCall::initialize_shuffle_bif_names()
{
    shuffleBifs["_Z7shuffleDv2_cDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_cDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_cDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_cDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_cDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_hS_"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_hS_"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_hS_"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_hS_"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_hDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_hDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_hDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_hDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_sDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_sDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_sDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_sDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_tS_"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_tS_"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_tS_"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_tS_"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_tDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_tDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_tDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_tDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_iDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_iDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_iDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_iDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_jS_"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_jS_"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_jS_"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_jS_"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_jDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_jDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_jDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_jDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_lDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_lDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_lDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_lDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_mS_"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_mS_"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_mS_"] = 2;
    shuffleBifs["_Z7shuffleDv16_mDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_mDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_mDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_mDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_mS_"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_fDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_fDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_fDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_fDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv2_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv4_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv8_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv16_h"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv2_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv4_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv8_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv16_t"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv2_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv4_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv8_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv16_j"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv2_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv4_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv8_m"] = 2;
    shuffleBifs["_Z7shuffleDv2_dDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv4_dDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv8_dDv16_m"] = 2;
    shuffleBifs["_Z7shuffleDv16_dDv16_m"] = 2;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_cS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_cS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_cS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_cS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_hS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_hS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_hS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_hS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_sS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_sS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_sS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_sS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_tS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_tS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_tS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_tS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_iS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_iS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_iS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_iS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_jS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_jS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_jS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_jS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_lS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_lS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_lS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_lS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_mS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_mS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_mS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_mS_S_"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_fS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_fS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_fS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_fS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv2_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv4_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv8_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv16_h"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv2_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv4_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv8_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv16_t"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv2_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv4_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv8_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv16_j"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv2_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv4_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv8_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv2_dS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv4_dS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv8_dS_Dv16_m"] = 3;
    shuffleBifs["_Z8shuffle2Dv16_dS_Dv16_m"] = 3;
}

}

